package d3_collection_demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Room {

    //1、创建一个集合,进行存储所有的牌 ----->不知道用什么集合时,上来就给他一个ArrayList
    private ArrayList<Card> allCards = new ArrayList<>();

    //2、创建房间的时候,牌要准备好
    //初始化54张牌
    //是有代码块进行初始化牌
    {
        //3、准备点数,与花色  由于知道花色与点数 所以改用什么就用什么进行存储
        //数组
        //点数
        //个数确定,类型确定
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        //花色
        //个数确定,类型确定
        String[] colors = {"♦", "♥", "♣", "♠"};
        //对牌的大小进行记录
        int size = 0;

        //4、创建一副牌
        //遍历点数与花色
        for (String number : numbers) {
            for (String color : colors) {
                size++;
                Card card = new Card(number, color, size);
                //5、将牌压进集合里面去
                allCards.add(card);
            }
        }

        //6、单独加大小王
        allCards.add(new Card("", "小王", ++size));
        allCards.add(new Card("", "大王", ++size));
//        System.out.println(size);
        //7、展示牌情况
        System.out.println(allCards);
    }

    //subList(开始索引,结束索引)------>包前不包后 截取三个元素

    //只做发牌的逻辑
    public void start() {
//        System.out.println(this.size);
        //8、洗牌
        Collections.shuffle(allCards);//注ss意只能进行List集合的操作
        System.out.println(allCards);

        //9、发牌
        //定义三玩家(按照面向对象的思想,应该创建对象,但是没有做打牌功能,所以就用三个集合表示)
        //不知道时,直接使用ArrayList<>
        ArrayList<Card> chenPingAn = new ArrayList<>();
        ArrayList<Card> ningYao = new ArrayList<>();
        ArrayList<Card> jiZiYue = new ArrayList<>();

        //发出51张牌
        //使用轮询算法--->按照固定的顺序进行发牌
        //遍历集合-->获取所有的牌
        //模于一个数,结果必定是这个数-1 的整数
        for (int i = 0; i < allCards.size() - 3; i++) {
            Card card = allCards.get(i);
            //将牌发给每一个玩家
            if (i % 3 == 0) {
                chenPingAn.add(card);
            } else if (i % 3 == 1) {
                ningYao.add(card);
            } else if (i % 3 == 2) {
                jiZiYue.add(card);
            }
        }

        //拿到最后三张底牌:
        //subList(开始索引,结束索引)------>就是对集合进行截取--->包前部包后
        //返回一个新的集合
        //这样写很优雅
        List<Card> lastThree = allCards.subList(allCards.size() - 3, allCards.size());
        //抢地主
        jiZiYue.addAll(lastThree);
        System.out.println(lastThree);
        //10、对牌进行排序
        //进行排序
        //独立功能独立成方法
        System.out.println(sortCard(chenPingAn));
        System.out.println(sortCard(ningYao));
        System.out.println(sortCard(jiZiYue));
        //11、看牌
        System.out.println("陈平安: " + chenPingAn);
        System.out.println("宁姚: " + ningYao);
        System.out.println("姬紫月: " + jiZiYue);

    }
    public <T> void sort(T e){
        System.out.println(e);
    }

    //写成多态,比较专业
    private List<Card> sortCard(List<Card> user) {
       /* Collections.sort(user, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                return 0;
            }
        });*/
        Collections.sort(user, (o1, o2) -> o2.getSize() - o1.getSize());
        return user;
    }
}
